جزوه · فصل دهم · جلسه ۹۷ · امن‌سازی دسترسی و رمز عبور ← بازگشت به فهرست
📘 فصل دهم · جلسه ۹۷ امن‌سازی دسترسی و رمز عبور
📅 تاریخ: شنبه، ۷ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث حیاتی در امنیت سیستم است. مدیریت رمزهای عبور، محل ذخیره‌سازی آنها و نحوهٔ دسترسی به کاربر root در آزمون‌های LPIC و RHCSA بسیار پرتکرار است.
🔐 قبل از شروع، یه مثال ساده:

فرض کن تو یه ساختمان اداری مسئول امنیت هستی. باید بدونی کلید هر کدوم از کارمندها کجا ذخیره شده، چطور رمز درب ورودی رو تنظیم کنی، و اگر کسی اخراج شد چطور دسترسی‌اش رو بگیری. توی لینوکس، مدیریت رمز عبور و دسترسی root دقیقاً همینه: باید بدونی رمزها کجا ذخیره می‌شن، چطور تنظیمشون کنی، و چطور دسترسی مدیریت کامل (root) رو به کاربران بدی یا ازشون بگیری. این جلسه بهت یاد میده چطور این کارها رو انجام بدی!

▍ محل ذخیره‌سازی رمزهای عبور

در لینوکس، اطلاعات کاربران و رمزهای عبور در دو فایل اصلی ذخیره می‌شوند:

📄 /etc/passwd

  • اطلاعات عمومی کاربران (نام کاربری، UID، GID، شل، دایرکتوری خانه).
  • در گذشته رمز عبور هم اینجا ذخیره می‌شد، اما الان به دلیل امنیت، رمز به جای دیگری منتقل شده.
  • همهٔ کاربران می‌توانند این فایل را بخوانند (قابل مشاهده با cat).
  • مثال: ya3in:x:1000:1000:,,,:/home/ya3in:/bin/bash

🔒 /etc/shadow

  • اطلاعات حساس رمز عبور (هش‌شده).
  • فقط کاربر root می‌تواند این فایل را بخواند.
  • شامل: رمز هش‌شده، تاریخ آخرین تغییر، تاریخ انقضا، و ...
  • مثال: ya3in:$6$xyz...:18972:0:99999:7:::
┌──(ya3in㉿kali)-[~] └─$ cat /etc/passwd | head -3 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin └─$ sudo cat /etc/shadow | head -3 root:$6$xyz...:18972:0:99999:7::: daemon:*:18972:0:99999:7::: bin:*:18972:0:99999:7:::

توضیح: در /etc/shadow به جای رمز، یک هش (رشتهٔ رمزنگاری‌شده) ذخیره می‌شود که قابل برگشت به رمز اصلی نیست. ستاره (*) یعنی این کاربر نمی‌تواند با رمز وارد شود.

نکته: /etc/shadow فقط توسط root قابل خواندن است. این کار از دیده شدن رمزهای هش‌شده توسط کاربران عادی جلوگیری می‌کند.

▍ روش‌های تنظیم رمز عبور

• روش اول: passwd (تغییر رمز یک کاربر)

passwd ساده‌ترین و رایج‌ترین دستور برای تنظیم یا تغییر رمز یک کاربر است.

┌──(ya3in㉿kali)-[~] └─$ sudo passwd ali New password: Retype new password: passwd: password updated successfully

توضیح: با sudo passwd ali رمز کاربر ali را تغییر می‌دهیم. از شما خواسته می‌شود رمز جدید را دو بار وارد کنید.

نکته: اگر passwd را بدون آرگومان اجرا کنید، رمز خودتان را تغییر می‌دهید.

• روش دوم: chpasswd (تغییر رمز چند کاربر به‌صورت یکجا)

chpasswd به شما اجازه می‌دهد رمز چندین کاربر را به‌صورت یکجا و از طریق ورودی استاندارد تغییر دهید.

┌──(ya3in㉿kali)-[~] └─$ echo "ali:123456" | sudo chpasswd └─$ echo -e "reza:qwerty\nsara:password" | sudo chpasswd

توضیح: با echo "user:password" | sudo chpasswd رمز کاربر موردنظر را تغییر می‌دهیم. برای چند کاربر، هر خط را به فرمت user:password می‌نویسیم.

⚠️ توجه: در chpasswd رمزها به صورت متن ساده (Plain Text) منتقل می‌شوند، پس حتماً از آن در محیط‌های امن استفاده کنید.

▍ لاک کردن (Lock) یک کاربر

گاهی نیاز دارید دسترسی یک کاربر را به‌طور موقت یا دائم غیرفعال کنید، بدون اینکه او را حذف کنید. دو روش اصلی برای این کار وجود دارد:

دستور کاربرد توضیح
sudo passwd -l username قفل کردن (Lock) کاربر با قرار دادن ! در ابتدای رمز در /etc/shadow
sudo passwd -u username باز کردن قفل (Unlock) کاربر برداشتن ! از ابتدای رمز
sudo usermod -L username قفل کردن کاربر مشابه passwd -l
sudo usermod -U username باز کردن قفل کاربر مشابه passwd -u
┌──(ya3in㉿kali)-[~] └─$ sudo passwd -l ali passwd: password expiry information changed. └─$ sudo grep ali /etc/shadow ali:!$6$xyz...:18972:0:99999:7::: # علامت ! نشان‌دهندهٔ قفل بودن است └─$ sudo passwd -u ali passwd: password expiry information changed.

توضیح: با passwd -l یک ! به ابتدای رمز کاربر در /etc/shadow اضافه می‌شود و عملاً ورود او غیرممکن می‌شود. با -u این علامت برداشته می‌شود.

نکته: قفل کردن کاربر با passwd -l یا usermod -L باعث نمی‌شود که کاربر از سیستم خارج شود، فقط ورودهای جدید را مسدود می‌کند.

▍ دسترسی به کاربر root

کاربر root قدرتمندترین کاربر در لینوکس است و دسترسی کامل به تمام بخش‌های سیستم دارد. برای انجام کارهای مدیریتی، معمولاً به این کاربر نیاز پیدا می‌کنید. دو روش اصلی برای دسترسی به root وجود دارد:

🔵 su (Switch User)

  • کاربرد: تغییر به کاربر دیگر (معمولاً root).
  • نحوهٔ استفاده: su - (با - محیط کامل root را بارگیری می‌کند).
  • نیاز به: رمز عبور مقصد (معمولاً root).
  • مزایا: ساده و سریع.
  • معایب: باید رمز root را به اشتراک بگذارید. همهٔ دستورات بعدی با دسترسی کامل اجرا می‌شوند و خطر اشتباه زیاد است.

🟢 sudo (Superuser Do)

  • کاربرد: اجرای یک دستور خاص با سطح دسترسی root.
  • نحوهٔ استفاده: sudo command
  • نیاز به: رمز عبور خودتان (نه root).
  • مزایا: امن‌تر است (نیازی به اشتراک رمز root نیست). هر دستور را به‌صورت مشخص با权限 root اجرا می‌کنید. تمام دستورات در /var/log/auth.log لاگ می‌شوند.
  • معایب: باید کاربر را در فایل /etc/sudoers تعریف کنید. برای دستورات طولانی باید هر بار sudo بزنید (مگر با sudo -i).

• مثال‌های عملی

┌──(ya3in㉿kali)-[~] └─$ su - Password: (رمز root را وارد کنید) root@kali:~# # حالا شما root هستید، هر دستوری اجرا می‌شود root@kali:~# exit exit ┌──(ya3in㉿kali)-[~]
┌──(ya3in㉿kali)-[~] └─$ sudo apt update [sudo] password for ya3in: (رمز خودتان را وارد کنید) Hit:1 http://kali.download/kali kali-rolling InRelease Reading package lists... Done

توضیح: با su - به root تبدیل می‌شوید (نیاز به رمز root). با sudo apt update فقط یک دستور خاص را با دسترسی root اجرا می‌کنید (نیاز به رمز خودتان).

• تنظیم sudo برای یک کاربر

برای اینکه یک کاربر بتواند از sudo استفاده کند، باید در فایل /etc/sudoers تعریف شود. بهترین روش استفاده از دستور visudo است.

┌──(ya3in㉿kali)-[~] └─$ sudo visudo # فایل /etc/sudoers باز می‌شود

برای افزودن کاربر به گروه sudo (در دبیان/اوبونتو):

┌──(ya3in㉿kali)-[~] └─$ sudo usermod -aG sudo ali

توضیح: کاربر ali به گروه sudo اضافه می‌شود و می‌تواند از sudo استفاده کند.

نکته مهم: هرگز فایل /etc/sudoers را به‌صورت مستقیم با ویرایشگر معمولی ویرایش نکنید. همیشه از visudo استفاده کنید تا از بروز خطاهای نحوی جلوگیری شود.

• مزایا و معایب su در مقابل sudo

ویژگی su sudo
نیاز به رمز root ✅ بله ❌ خیر (رمز خودتان)
امنیت ⚠️ پایین‌تر (اشتراک رمز root) ✅ بالاتر (دستورات لاگ می‌شوند)
مدیریت دسترسی ❌ همه یا هیچ ✅ قابل تنظیم (دستورات خاص)
لاگ شدن دستورات ❌ خیر ✅ بله (در /var/log/auth.log)
مناسب برای کارهای طولانی با دسترسی root اجرای دستورات خاص با دسترسی root
✅ جمع‌بندی نهایی:
  • رمزهای عبور در /etc/shadow ذخیره می‌شوند (فقط قابل خواندن توسط root).
  • passwd → تغییر رمز یک کاربر.
  • chpasswd → تغییر رمز چند کاربر به‌صورت یکجا.
  • passwd -l و usermod -L → قفل کردن کاربر.
  • passwd -u و usermod -U → باز کردن قفل کاربر.
  • su → تغییر به root (نیاز به رمز root).
  • sudo → اجرای یک دستور خاص با دسترسی root (نیاز به رمز خودتان).
  • visudo → ویرایش امن فایل /etc/sudoers.
📝 تمرین پیشنهادی:

یک اسکریپت بنویسید که:

  • یک کاربر جدید با useradd ایجاد کند.
  • با passwd رمز عبور برای او تنظیم کند.
  • با usermod -L کاربر را قفل کند.
  • با usermod -U کاربر را باز کند.
  • با sudo یک دستور ساده (مثل apt update) را اجرا کند.